package br.com.vestibulation.backbean;

import br.com.vestibulation.bean.Opcao;
import br.com.vestibulation.bean.Prova;
import br.com.vestibulation.bean.Questao;
import br.com.vestibulation.dao.ProvaDAO;
import javax.faces.bean.*;
import java.io.Serializable;

@ManagedBean(name = "provaBackBean")
@SessionScoped
public class ProvaBackBean implements Serializable {

    private Prova prova;
    private final int tempoInicial = 3;
    private int tempo;
    private static String tempoRestante;
    private String corFonte;
    private int numQuestao;
    private Questao questao;
    private int opcaoSelecionada;
    private boolean temTempo;

    public ProvaBackBean() {
        prova = new Prova();
        questao = new Questao();
        opcaoSelecionada = -1;
        numQuestao = 0;
        resetarTempo();
    }

    public int getOpcaoSelecionada() {
        return opcaoSelecionada;
    }

    public void setOpcaoSelecionada(int opcaoSelecionada) {
        this.opcaoSelecionada = opcaoSelecionada;
    }

    public Prova getProva() {
        return prova;
    }

    public int getTempo() {
        return tempo;
    }

    public void setTempo(int tempo) {
        this.tempo = tempo;
    }

    public String getTempoRestante() {
        return tempoRestante;
    }

    public void setTempoRestante(String tempoRestante) {
        ProvaBackBean.tempoRestante = tempoRestante;
    }

    public String getCorFonte() {
        return corFonte;
    }

    public void setCorFonte(String corFonte) {
        this.corFonte = corFonte;
    }

    public boolean isTemTempo() {
        return temTempo;
    }

    public boolean diminuirTempo() {
        int segundo = 0, minuto = 0, hora = 0;
        int aux = tempo;

        if (aux >= 3600) {
            hora = aux / 3600;
            aux = aux - (hora * 3600);
        }

        if (aux >= 60) {
            minuto = aux / 60;
            aux = aux - (minuto * 60);
        }

        if (tempo <= 600) {
            corFonte = "#FF0000";
        }

        if(tempo<=0){
            tempoRestante = "Tempo esgotado!";
            temTempo=false;
        } else{
            temTempo=true;
            tempo--;
            segundo = aux;
            tempoRestante = "Tempo restante: " + hora + "h " + minuto + "m " + segundo + "s";
        }
        return temTempo;
    }

    public String comecarProva() {
        resetarTempo();
        numQuestao = 0;
        ProvaDAO dao = new ProvaDAO();
        prova = dao.getProva();
        temTempo=true;
        return "Prova";
    }

    public int getNumQuestao() {
        return numQuestao;
    }

    public void setNumQuestao(int numQuestao) {
        this.numQuestao = numQuestao;
    }

    public Questao getQuestao() {
        questao = prova.getListaQuestoes().get(numQuestao);
        return questao;
    }

    public void obterResposta() {
        for (int i = 0; i < questao.getListaOpcoes().size(); i++) {
            if (questao.getListaOpcoes().get(i).getNumero() == opcaoSelecionada) {
                if (questao.getListaOpcoes().get(i).isCerta()) {
                    prova.setAcertos(prova.getAcertos() + 1);
                }
            }
        }
        opcaoSelecionada = -1;
    }

    public String gerarRelatorio(String usuario){
        ProvaDAO dao = new ProvaDAO();
        dao.gerarRelatorio(usuario, prova.getAcertos());
        RelatorioBackBean relatorio = new RelatorioBackBean();
        relatorio.atualizarRelatorio(usuario);
        return "Relatorio";
    }

    public String analisarProva(String usuario) {
        String retorno = null;
        obterResposta();
        if (numQuestao + 1 >= 5){
            return gerarRelatorio(usuario);
        } else{
            questao = prova.getListaQuestoes().get(numQuestao++);
        }
        return retorno;
    }

    public void resetarTempo() {
        tempo = tempoInicial;
        corFonte = "#FFFFFF";
    }
}
